package edu.utn.tacs.grupouno.ui.server.factories;

import edu.utn.tacs.grupouno.negocio.Turno;
import edu.utn.tacs.grupouno.negocio.TurnoSemanal;
import edu.utn.tacs.grupouno.rest.api.AnalisisService;
import edu.utn.tacs.grupouno.ui.client.dto.TurnoDTO;
import edu.utn.tacs.grupouno.ui.client.dto.TurnoSemanalDTO;

public class TurnoDTOFactory {

	private AnalisisService analisisProxy;

	public TurnoDTOFactory(AnalisisService analisisProxy) {
		this.analisisProxy = analisisProxy;
	}

	public TurnoDTOFactory() {
		
	}

	public TurnoDTO create(Turno turno) {
		TurnoDTO dto = new TurnoDTO();
		completeTurnoData(turno);
		
		if(turno.getAnalisis() != null) {
			AnalisisDTOFactory factory = new AnalisisDTOFactory();
			dto.setAnalisis(factory.create(turno.getAnalisis()));
		}
		if(turno.getEstado() != null) {
			dto.setAsistio(turno.getEstado().pacienteAsistio());
			dto.setDisponible(turno.getEstado().isDisponible());
		}
		dto.setKey(turno.getEncodedKey());
		dto.setFecha(turno.getFecha());
		dto.setHorario(turno.getHorario());
		
		return dto;
	}
	
	public TurnoSemanal create(TurnoSemanalDTO dto) {
		TurnoSemanal tsem = new TurnoSemanal();
		tsem.setDiaDeLaSemanaAsString(dto.getDiaDeLaSemana());
		tsem.setHorario(dto.getHorario());
		tsem.setFechaInicio(dto.getFechaInicio());
		return tsem;
	}

	private void completeTurnoData(Turno turno) {
		if(analisisProxy == null) {
			throw new RuntimeException("El factory no se inicializo con el servicio de Analisis");
		}
		if(turno.getAnalisisId() != null) {
			turno.setAnalisis(analisisProxy.getAnalisis(turno.getAnalisisId()));
		}
	}
}
